Muestreo y Análisis de Datos - Universidad de Alicante
Dpto. de Fundamentos del Análisis Económico. Universidad de Alicante
Nos familiarizaremos con los conceptos y comandos básicos de programación en R
R es un lenguaje interpretado: ejecuta las instrucciones directamente en la consola
Escribimos comandos en la consola y se ejecutan pulsando Enter:
La tecla de tabulador ofrece opciones de autocompletado
Ejecutar algo que no es un comando de R devuelve un error
O en el Editor de RStudio y se envían a la consola la o las líneas seleccionadas para ser evaluadas con el icono o con el atajo de teclado
Ctrl+Enter
NOTA: en MacOS, usad la tecla Command en lugar de Ctrl
Es preferible incluir varios comandos en un archivo de texto para ejecutarlos
Se puede replicar el proceso de cálculos paso a paso (no como Excel)
Creamos un nuevo archivo con el icono o en el menú File > New File > R script (atajo
Ctrl + Mays + N)
Guardamos el archivo con o en File > Save (atajo
Ctrl + S), eligiendo un directorio y nombre de extensión “.R” (por defecto) o “.r”
En un archivo de guion (guardado), RStudio marca las líneas con error y muestra el mensaje de error al pasar el puntero
Cada comando es “una” línea y se ejecutan secuencialmente
Un comando se puede extender visualmente más de una línea hasta completarse: p.e., hasta cerrar los paréntesis.
Escribimos log(, en otra línea 9 y ejecutamos: la consola cambia de > a +
No hace “nada” esperando que completemos el comando.
# marca el inicio de un comentario: lo que sigue se “ignora” (no se ejecuta) en RComentar es un buen hábito: ayuda a entender/recordar qué hacemos
Notad que RStudio tiene resaltado de sintaxis: distinto color para comentarios, números, funciones, etc.
Conviene organizar los archivos relacionados con un mismo tema en una estructura de (sub)directorios a partir de un directorio de trabajo principal
Esto puede hacerse manualmente, pero RStudio permite definir proyectos para gestionarlo fácilmente a través del menú File o desplegando el icono en la parte superior derecha
Desde el menú File > New Proyect o desde el icono, creamos un nuevo proyecto que estará asociado a un directorio de trabajo.
El nombre del proyecto será el nombre del directorio
También se crea un archivo con el mismo nombre y extensión “.Rproj”
Tenemos la opción de usar un Nuevo Directorio para el nuevo proyecto, seleccionando una ubicación y un nombre para el proyecto=directorio en esa ubicación
O bien elegimos un directorio ya existente para nuestro proyecto
Cuando cerramos y volvemos a abrir RStudio, tendremos activo el último proyecto abierto: ej.,
Tanto desde el menú como desde el icono de gestión de proyectos, podemos
cerrar el proyecto actual, File > Close Projects,
abrir otros proyectos guardados: File > Open Project o File > Recent Projects
Para trabajar en R con un archivo del proyecto, accedemos usando la ruta relativa al directorio de trabajo:
si están en el raíz del directorio: codigo.R, misdatos.Rdata
si están en un subdirectorio, indicamos la ruta separando directorios por /: datos/ventas.Rdata, datos/ano2020/ingresos.Rdata
La pestaña en el cuadrante inferior-derecho ofrece una forma visual de abrir, crear, copiar, mover o eliminar archivos o directorios, etc.
Algunos argumentos son obligatorios, otros tienen valores por defecto que se pueden omitir
Los argumentos se pueden especificar por nombre o por orden.
RStudio tiene autocompletado y ayuda flotante para funciones y otros elementos de R
log, se muestra la forma esperada de trabajar con esa funciónRStudio también tiene una pestaña para buscar ayuda
Las búsquedas online o las IAs (como chatGPT o Bard) pueden ser útiles.
PERO debemos tener un conocimiento mínimo para aprovechar realmente una solución
NO uséis copiar-pegar sin entender el código: copiar-pensar-adaptar
<- almacena un contenido en un objeto con un nombre,1 que incluye letras, números y algunos carácteres especiales (“.”, “_”)R es “case-sensitive”: x y X son dos objetos distintos
Los objetos asignados pueden usarse posteriormente, p.e., para generar otros a partir de ellos
El espacio de trabajo es el conjunto de objetos activos en memoria, resultado de todos los comandos ejecutados previamente
En RStudio, la pestaña muestra los objetos y su valor
Para mostrar y eliminar objetos del espacio de trabajo:
Environment o el comandoEn programación, cometer errores es normal
En muchos errores, R se “quejará” mostrando mensajes en rojo
Aviso: R ofrece un resultado (y continuará al siguiente comando), PERO indica que puede haber algo “no deseado”
Error: para la ejecución, sin resultado, e “informa” de la razón
Algunos mensajes son claros, pero otros requieren más investigación
Peor que un mensaje de error: escribimos (copiamos) un código que funciona pero no hace lo que queremos…
El ordenador NO se equivoca: hace lo que le pedimos según unas reglas bien definidas por R, que debemos conocer
Además de las funciones, los principales objetos con los que trabajaremos son:
Además, estos objetos pueden contener varios tipos de datos o variables:
c()” (combinar):Environment o con str()Forzamos que un objeto sea tratado con una clase concreta, con as.integer(), as.numeric(), as.character() y as.logical()
NA (con un “warning”)NO se pueden realizar operaciones incompatibles entre clases
Los vectores pueden tener nombres: una “etiqueta” (única) para cada elemento del vector
Los nombres de un vector son un vector de caracteres de la misma longitud
Obtenemos objeto lógico enunciando una relación que puede ser cierta o falsa
Estos enunciados incluyen comparaciones básicas de igualdad o desigualdad
&), O (|) y NO (!):x %in% Y es cierto cuando x es un elemento de Y[] (paréntesis cuadrado)1 yLos factores son un tipo de objeto de R específico para trabajar con información cualitativa
Los datos originales pueden estar codificados de forma poco clara para el análisis (género como número o abreviatura)
Se usa factor() para crear un vector de tipo factor, con argumentos para los niveles y sus etiquetas
summary() devuelve los principales estadísticos descriptivos de un vector numéricosummary() ofrece resultados diferentes según el tipo de objeto (porque tiene distintas propiedades)matrix() o uniendo vectores filas o vectores columnas (de las mismas dimensiones) con cbind() y rbind()Se pueden hacer todo tipo operaciones matriciales con R como multiplicación matricial, %*%, transponer, t(M1), invertir, solve(A), etc.
También existen funciones para matrices: diag(), rowSums(), colMeans(), etc.
str también se puede usar para listas[] extraemos elementos por posición o por nombre, como listas[[ ]] (por posición o por nombre) o con $(solo por nombre) extraemos los elementos en su clase originalunlist() convierte una lista en vector, usando la clase que pueda ajustarse a todos los objetos (elementales) Es un tipo de objetos específico para facilitar el análisis de datos: una colección de variables por columnas y observaciones por filas.
Se pueden crear con data.frame() a partir de vectores existentes, dando nombres a las variables, o de matrices
View(datos) o en “Enviroment” de RStudiohead() y tail()$ o por nombre o posición de la columna con [[ ]]subset() extrae parte de los datos, basado en una condición lógica; devuelve siempre un “data frame”Una biblioteca contiene nuevos objetos de R: funciones, datos, etc.
Para instalar una nueva biblioteca (se hace una vez), en Tools > Install packages o en o con el comando
Mantenemos actualizados los paquetes, en el menú Tools o en
La biblioteca solo está disponible si se carga en la sesión actual
Nota: en adelante, la bibliotecas que carguemos se suponen instaladas
En vemos las bibliotecas instaladas y las cargadas aparecen marcadas
El nombre completo de un objeto es biblioteca::nombre
También se usa nombre completo si no se ha cargado la biblioteca
Para mostrar todos los datos de las bibliotecas cargadas
save() (en una ruta relativa al directorio de trabajo)load() (= icono En la pestaña de : doble-clic carga un archivo de datos
Nota: este tipo de archivo puede contener varios objetos, incluidas varios conjuntos de datos
Varias bibliotecas permiten trabajar con distintos tipos de archivos de datos; entre otros:
utils (R base), readrreadxl, openxlsx haven, foreignDescargad estos ejemplos: renta.txt, sex_data.csv, beauty.xls, nsw.dta
En de RStudio, tenemos acceso visual para cargar algunos formatos (con la biblioteca necesaria instalada)
rio es un meta-paquete (instala otras bibliotecas) para importar y exportar varios formatos de datos de forma sencilla
`
riorio permite trabajar con varios formatos de forma simple y unificada (el mismo comando para todos)
P.e., datos nativos de R, archivos de texto (también comprimidos), hojas de cálculo, formatos de software estadístico, Google Sheets, json
En la Ayuda se incluye una presentación completa del paquete
El comando import() se usa para leer los datos
rio (cont.)Las opciones por defecto para un archivo pueden no ser adecuadas (p.e., el tipo de separador con .csv)
La Ayuda describe los argumentos para cambiarlas
Podemos exportar datos a un tipo de formato con export()
convert()La biblioteca httr tiene la función GET() para descargar una página web
Bibliotecas con datos muy utilizados: pwt (“Penn World Tables”)
Bibliotecas con funciones para acceder directamente a datos online (con APIs públicas)
rdbnomics para los datos gratuitos de https://db.nomics.world/
OECD para los datos de la OCDE
eurostat (incluye datos del INE español)
quandl (de pago)
quantmod y tidyquant
MicroDatosEs con microdatos del INE (ej., EPA)
plot.default) como type (puntos, líneas, etc.), símbolo de punto (pch), tipo de línea (lty), ancho de línea (lwd), color (col), título, etiquetas de los ejes, etc.par(), combinar gráficos, añadir líneas, texto, etc. y exportar los gráficostable() calcula distribuciones de frecuencias de una variable o conjuntas: el resultado es un objetoprop.table()mean(), var(), etc.NANA y la frecuencia total:NAs es NA: debemos decir que los elimine explícitamente (y ser conscientes de lo que implica)na.omit() elimina observaciones con NAs de una o varias variablesNAs? Eliminarlos implica selección muestral y la alternativa de imputar valores implica supuestos sobre éstosaggregateaggregate() lo hace más sencillo y devuelve un data frame~ indica “en función de”, separando las variables con +x:
dbinom(), dunif(), dlogis(), dnorm(), dchisq(), dt(), dF()Distribución acumulada por debajo de x
pbinom(), punif(), plogis(), pnorm(), pchisq(), pt(), pF()Valor cuya probabilidad acumulada es el cuartil q
qbinom(), qunif(), qlogis(), qnorm(), qchisq(), qt(), qF()Generador de números (pseudo)aleatorios:
rbinom(), runif(), rlogis(), rnorm(), rchisq(), rt(), rF()Como en todo lenguaje de programación R, tiene funciones para
Ejecución condicional if(): una parte del código se ejecuta solo si se cumple una condición
Bucles for(): se repite un mismo bloque de código mientras se itera por los valores de vector
Crear funciones propias con function()
Una variante de la ejecución condicional, solo para crear variables según una condición
En la realidad, los datos se consideran una muestra de una población con parámetros desconocidos: estimamos para inferir sus valores
Un ordenador permite razonar “a la inversa”: fijar los parámetros de la población, generar una muestra aleatoria de esa distribución y estimar
“Vemos” la variabilidad muestral de los estimadores: p.e., las medias de muestras obtenidas de la misma distribución son distintas
for permiten repetir el proceso muchas vecesEl análisis asintótico se ocupa del comportamiento de los estimadores cuando el tamaño muestral es grande
Para una muestra de tamaño \(n\) de una población (de “cualquier” distribución) \(Y\sim (\mu, \sigma^2)\),
según la ley de los grandes números, \(E(\bar{Y}) \to \mu\) cuando \(n \to \infty\)
según el teorema central del límite, \(\bar{Y} \overset{a}{\sim} N(\mu, \sigma^2/n)\)